// 主要JavaScript功能

// 通用Ajax请求函数
function ajaxRequest(url, method, data, successCallback, errorCallback) {
    fetch(url, {
        method: method,
        headers: {
            'Content-Type': 'application/json',
        },
        body: data ? JSON.stringify(data) : null
    })
    .then(response => response.json())
    .then(data => {
        if (successCallback) successCallback(data);
    })
    .catch(error => {
        console.error('Error:', error);
        if (errorCallback) errorCallback(error);
    });
}

// 显示提示消息
function showAlert(message, type = 'success') {
    const alertDiv = document.createElement('div');
    alertDiv.className = `alert alert-${type} alert-dismissible fade show position-fixed top-0 start-50 translate-middle-x mt-3`;
    alertDiv.style.zIndex = '9999';
    alertDiv.innerHTML = `
        ${message}
        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
    `;
    document.body.appendChild(alertDiv);
    
    setTimeout(() => {
        alertDiv.remove();
    }, 3000);
}

// 确认对话框
function confirmAction(message, callback) {
    if (confirm(message)) {
        callback();
    }
}

// ========== 时区处理函数（UTC ↔ 本地时间） ==========

/**
 * 将UTC时间字符串转换为本地Date对象
 * @param {string} utcString - UTC时间字符串（ISO格式）
 * @returns {Date} 本地时间Date对象
 */
function utcToLocal(utcString) {
    if (!utcString) return null;
    // JavaScript的Date构造函数会自动将UTC时间转换为本地时间
    return new Date(utcString);
}

/**
 * 将本地时间转换为UTC ISO字符串（用于发送给后端）
 * @param {Date|string} localDateTime - 本地时间
 * @returns {string} UTC时间ISO字符串
 */
function localToUtc(localDateTime) {
    if (!localDateTime) return null;
    const date = typeof localDateTime === 'string' ? new Date(localDateTime) : localDateTime;
    return date.toISOString();
}

/**
 * 格式化UTC时间为本地日期字符串
 * @param {string} utcString - UTC时间字符串
 * @param {boolean} includeTime - 是否包含时间部分
 * @returns {string} 格式化的本地时间字符串
 */
function formatUtcToLocal(utcString, includeTime = false) {
    if (!utcString) return '';
    const localDate = utcToLocal(utcString);
    
    const year = localDate.getFullYear();
    const month = String(localDate.getMonth() + 1).padStart(2, '0');
    const day = String(localDate.getDate()).padStart(2, '0');
    
    if (!includeTime) {
        return `${year}-${month}-${day}`;
    }
    
    const hours = String(localDate.getHours()).padStart(2, '0');
    const minutes = String(localDate.getMinutes()).padStart(2, '0');
    return `${year}-${month}-${day} ${hours}:${minutes}`;
}

// ========== 原有函数（已更新为使用UTC转换） ==========

// 格式化日期（已更新：自动处理UTC转本地时间）
function formatDate(dateString) {
    return formatUtcToLocal(dateString, false);
}

// 计算剩余天数（已更新：自动处理UTC时间）
function getDaysRemaining(deadline) {
    const now = new Date();
    const end = utcToLocal(deadline);  // 将UTC截止时间转为本地时间
    const diff = end - now;
    return Math.ceil(diff / (1000 * 60 * 60 * 24));
}

// 密码强度检测
function checkPasswordStrength(password) {
    let strength = 0;
    if (password.length >= 8) strength++;
    if (password.length >= 12) strength++;
    if (/[a-z]/.test(password) && /[A-Z]/.test(password)) strength++;
    if (/\d/.test(password)) strength++;
    if (/[^a-zA-Z0-9]/.test(password)) strength++;
    
    if (strength <= 2) return { level: '弱', class: 'danger' };
    if (strength <= 3) return { level: '中', class: 'warning' };
    return { level: '强', class: 'success' };
}

// 复制到剪贴板
function copyToClipboard(text) {
    navigator.clipboard.writeText(text).then(() => {
        showAlert('已复制到剪贴板', 'success');
    }).catch(err => {
        showAlert('复制失败', 'danger');
    });
}

// 侧边栏切换（移动端）
function toggleSidebar() {
    const sidebar = document.querySelector('.sidebar');
    sidebar.classList.toggle('show');
}

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function() {
    // 设置当前导航项为激活状态
    const currentPath = window.location.pathname;
    document.querySelectorAll('.sidebar .nav-link').forEach(link => {
        if (link.getAttribute('href') === currentPath) {
            link.classList.add('active');
        }
    });
    
    // 初始化工具提示
    const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });
});

